const express = require('express'),
      Messages = require('../api/messages'),
      dataService = require('../services/dataService');

const callbackRouter = express.Router();

callbackRouter
    .route('/')
    
    .post(async (req, res, next) => {
        try {
            const schedule = dataService.schedule.load(),
                  commands = dataService.commands.load();

            const data = req.body;
    
            if(data.type === 'confirmation') return res.send(process.env.CONFIRMATION_STRING);
            else res.status(200).send('ok');
    
            if(data.type === 'message_new') {
                const text = data.object.message.text.trim(),
                      isCommand = /^![а-я\d]+.*$/gm.test(text),
                      peerId = data.object.message.peer_id;

                if(!isCommand) return;
                
                const textParts = text.split(' '),
                      command = textParts[0],
                      parameters = textParts.slice(1, textParts.length);

                switch(command) {
                    case '!команды': {
                        let message = '&#129302; Доступны следующие команды:\n';

                        for(let command of commands)
                            message += `\n${command.name} ${command.parameters ? command.parameters + ' ' : ''}- ${command.description}`;

                        await Messages.send(peerId, message);

                        break;
                    };

                    case '!расписание': {
                        let message = '&#128197; Расписание занятий:\n';

                        for(let item of schedule)
                            message += `\n- ${item.day}: ${item.start} - ${item.end}${item.note ? ` (${item.note})` : ''}`;

                        message += '\n\n&#9888; Напоминаем, что на тренировку нужно приходить за 10 минут до начала!';

                        await Messages.send(peerId, message);

                        break;
                    };

                    case '!посещаемость': {
                        await Messages.send(peerId, '&#128679; Этот пункт еще в разработке...\n\nВозвращайся позже!');

                        break;
                    };

                    default: await Messages.send(peerId, '&#10060; Команда не найдена!\n\n!команды - для вывода списка команд');
                }
            }
        } catch(err) {
            next(err);
        }
    });

module.exports = callbackRouter;
